package com.blog.cloud.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class GatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }

}

// 关于 Spring Cloud Gateway 的的配置和使用，请参考 Spring Cloud Gateway 官方文档：https://spring.io/projects/spring-cloud-gateway

/*
* Spring Cloud Gateway 的功能：
* 1、基于 Spring Framework 和 Spring Boot 构建
* 2、能根据任何请求属性匹配路由。
* 3、谓词和过滤器专门针对路由。
* 4、断路器集成。
* 5、与 Spring Cloud DiscoveryClient 集成
* 6、易于编写谓词和过滤器
* 7、请求速率限制
* 8、路径重写
*
* Spring Cloud Gateway 的三个核心术语表述如下：
* 1、Predicate：一个断言，它决定是否应该路由到某个特定服务。
* 2、Filter：一个过滤器，它可以修改请求或响应。
* 3、Route：一个路由，它将请求路由到特定的服务。
*
* # GatewayFilter 路由过滤器允许以某种方式修改传入 HTTP 请求或传出 HTTP 响应。路由过滤器适用于特定路由。Spring Cloud Gateway 包含许多内置的 GatewayFilter 工厂。
* # GatewayFilter 如何使用参考 https://docs.spring.io/spring-cloud-gateway/reference/spring-cloud-gateway/gatewayfilter-factories.html
*
* # 全局过滤器，GlobalFilter 接口的签名与 GatewayFilter 相同。这些是有条件地应用于所有路由的特殊过滤器。
*
*
* 反应式系统具有某些特性，是低延迟、高吞吐量工作负载的理想选择。Project Reactor 和 Spring 产品组合相互配合，
* 使开发人员能够构建反应灵敏、富有弹性和消息驱动的企业级反应式系统。
*
* # 什么是反应式处理？
* 反应式处理是一种范式，它使开发人员能够构建非阻塞、异步的应用程序，并能处理反向压力（流量控制）。
*
* # 为什么要使用反应式处理？
* 反应式系统能更好地利用现代处理器。此外，在反应式编程中加入反向压力可确保解耦组件之间具有更好的弹性。
*
* # 反应堆项目
* Project Reactor 是一个完全无阻塞的基础，支持反向压力。它是 Spring 生态系统中反应堆栈的基础，
* 是 Spring WebFlux、Spring Data 和 Spring Cloud Gateway 等项目的特色。
*
* # 反应式微服务
* 开发人员从阻塞代码转向非阻塞代码的主要原因之一是效率。反应式代码能以更少的资源完成更多的工作。Project Reactor 和 Spring WebFlux 可让开发人员利用多核、
* 下一代处理器处理潜在的大量并发连接。利用反应式处理，您可以用更少的微服务实例满足更多并发用户的需求。
*
* # 利用 Spring Boot 实现反应式微服务
* Spring 产品组合提供两种并行堆栈。一个是基于 Servlet API 的 Spring MVC 和 Spring Data 结构。另一种是完全反应式堆栈，
* 利用了 Spring WebFlux 和 Spring Data 的反应式存储库。在这两种情况下，Spring Security 都能为您提供对这两种堆栈的本机支持。
*
* # 与通用技术集成
* 以反应方式访问和处理数据非常重要。MongoDB、Redis 和 Cassandra 在 Spring Data 中都有原生的反应式支持。
* 许多关系数据库（Postgres、Microsoft SQL Server、MySQL、H2 和 Google Spanner）都通过 R2DBC 提供反应式支持。
* 在消息传递领域，Spring Cloud Stream 还支持对 RabbitMQ 和 Kafka 等平台的反应式访问。
* */